前端知识点整理系列(一)—�?apply() call() bind()
2017-06-04

最近在刷牛客网的前端题,涉及到很多apply(),call(),bind()的调用,今天抽空整理一下这种函数的调用方法�?/p>
我们知道,在js里,万物皆对象,一个函数本身就是一个对象,所以它自然拥有一些方法,在js里,每一个函数都拥有一�?code>prototype——Function,其�?code>apply()�?code>call()�?code>bind()就是这个原型自带的方法。我们知道这三个方法都能改变函数this的指向,其实他们的区别不是很大,今天就整理一下他们之间的区别�?br>先说 apply() 方法,它让我们构造一个参数数组传递给函数,同时可以自己来设置 this 的值,这就是它最强大的地方。它有两个参数,第一个参数是传递给这个函数用来绑定this的值,第二个参数传递的是一个数组�?/p>
我们对a进行apply()方法调用,函�?a 居然可以�?o 加属性值。当然,如果�?apply() 的第一个参数传�?null,那么在函数 a 里面 this 指针依然会绑定全局对象�?/p>
再谈�?code>call(),其�?code>call()�?code>apply()没有什么本质的区别,在于第二个参数�?code>apply()传递的是一个数组,你想传递给这个函数的所有参数都放在数组里,�?code>call()传递的是一个一个参数�?/p>
仅此而已�?/p>
再来看看bind()方法,上面讲的无论是 call() 也好�?apply() 也好,都是立马就调用了对应的函数,�?bind() 不会�?code>bind() 会生成一个新的函数,bind()函数的参数跟 call()一致,第一个参数也是绑�?this 的值,后面接受传递给函数的不定参数�?bind()生成的新函数返回后,你想什么时候调就什么时候调,看下代码就明白�?/p>
下面看一个牛客网上的例子,利用apply()调用函数�?/p>
题目描述
实现函数 callIt,调用之后满足如下条�?br>1、返回的结果为调�?fn 之后的结�?br>2、fn 的调用参数为 callIt 的第一个参数之后的全部参数
|
|
我们来实现这个callIt函数�?/p>